CLIを使用してS3のバージョニングを設定し削除したファイルを戻してみる
こんにちは、S3のバージョニングって便利だなと思っているDA部の下地です。
そんなS3のバージョニングをAWS CLIを使用して実装してみましたのでまとめたいと思います。
全体像
aws s3api
とaws s3
を使用し以下の手順で実装します(CLIコマンドが使用できるという前提で進めさせてもらいます)。
- バケット作成とバージョニングの設定
- ファイルのアップロードと削除
- objectのバージョンを確認
- ファイルを戻す
1. バケット作成とバージョニングの設定
まずはじめに、2010-test-bucket
という名前でS3バケットを作成します。作成時に、--create-bucket-configuration LocationConstraint
の指定が必要になるのでap-northeast-1
を指定します。
$ aws s3api create-bucket --profile プロファイル名 \ --bucket 2010-test-bucket \ --create-bucket-configuration LocationConstraint=ap-northeast-1 { "Location": "http://2010-test-bucket.s3.amazonaws.com/" }
バケットが作成されました。作成したバケットのversioningを有効化するためにs3api put-bucket-versioning
を使用します。
$ aws s3api put-bucket-versioning --profile プロファイル名 \ --bucket 2010-test-bucket \ --versioning-configuration Status=Enabled
バケットのバージョニングが有効化されたか確認します。
$ aws s3api get-bucket-versioning --profile プロファイル名 \ --bucket 2010-test-bucket { "Status": "Enabled" }
有効化されていることを確認しました。
2. ファイルのアップロードと削除
次にバージョニングを有効化したS3バケットに、s3 cp
を使用してファイルをアップロードします。
$ aws s3 cp test.txt s3://2010-test-bucket/ --profile プロファイル名 upload: ./test.txt to s3://2010-test-bucket/test.txt
s3 ls
を使用してバケット内を確認します。
$ aws s3 ls s3://2010-test-bucket/ --profile プロファイル名 2020-10-14 17:22:56 15 test.txt
アップロードしたファイルがあることが確認できました。では、このファイルを削除します。
$ aws s3 rm s3://2010-test-bucket/test.txt --profile プロファイル名 delete: s3://2010-test-bucket/test.txt
バケット内にファイルがないことを確認できました。
$ aws s3 ls s3://2010-test-bucket/ --profile プロファイル名
3. ファイルのバージョンを確認
text.txt
はファイルは削除されていますがバージョニングを有効にしているのでファイルのバージョンをs3api list-object-versions
を使用して確認します。
$ aws s3api list-object-versions --profile プロファイル名 \ --bucket 2010-test-bucket \ --prefix test.txt { "Versions": [ { "ETag": "\"ebc92aad19b71192647c7663ecf25f18\"", "Size": 15, "StorageClass": "STANDARD", "Key": "test.txt", "VersionId": "VoHF9j08Yp.zys8frvWszurCmYjqAD5l", "IsLatest": false, "LastModified": "2020-10-14T08:22:56+00:00", "Owner": { "DisplayName": "spare-0340", "ID": "768f6050502b8ce1417048ad447ef58a7357f088ff070255f1041259028d393d" } } ], "DeleteMarkers": [ { "Owner": { "DisplayName": "spare-0340", "ID": "768f6050502b8ce1417048ad447ef58a7357f088ff070255f1041259028d393d" }, "Key": "test.txt", "VersionId": "N3a0VLfBZRMXDAand3KSErfLFwFuOcOF", "IsLatest": true, "LastModified": "2020-10-14T08:26:17+00:00" } ] }
VersionsとDeleteMarkerの2つがあります。
4. ファイルを戻す
先ほど確認したDeleteMarker
を削除するとファイルが削除される前の状態に戻りますので、DeleteMarker
のVersionIdを指定し削除します。削除する際にはs3api delete-object
を使用します。
aws s3api delete-object --profile プロファイル名 \ --bucket 2010-test-bucket \ --key 2010_versioning/test.txt \ --version-id N3a0VLfBZRMXDAand3KSErfLFwFuOcOF { "DeleteMarker": true, "VersionId": "N3a0VLfBZRMXDAand3KSErfLFwFuOcOF" }
ではdeleteマーカーを削除しましたので、ファイルがあるか確認します。
aws s3 ls s3://2010-test-bucket/ --profile プロファイル名 2020-10-14 17:22:56 15 test.txt
削除したファイルが戻ったことが確認できました!
まとめ
S3のバージョニングはとても便利だなと実感したのでCLIを使用して実装しました。この記事がどなたかの助けになれば幸いです。